#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdlib.h>


void do_other(){
  printf("%d+%d=%d\n",1,2,3);
}

int main(){
  //进程程序替换
  
  printf("process running\n");

  execl("/usr/bin/ls","ls -a -l");

  printf("process running continue\n");















 // pid_t id = fork();
 //// assert(id != -1);
 ////轮询等待
 // if(id == 0){
 //   int cnt = 5;
 //   while(cnt){ 
 //   printf("child process running,pid:%d,ppid:%d,cnt:%d\n",getpid(),getppid(),cnt--);
 //   execlp("ls","ls -a -l",0);
 //   sleep(1);
 //   }
 //   exit(0);
 // }
 // 
 // //sleep(5);
 // int status = 0;
 // while(1){
 //   pid_t ret = waitpid(id,&status,WNOHANG);//非阻塞
 //   if(ret == 0){//
 //       
 //       printf("wait success,but child process running\n");
 //       //do_other();
 //      // execlp("ls","ls -a -l",0);//通过子进程去实现shell指令的程序替换
 //      // break;
 //   }else if(ret > 0){
 //       printf("wait success,ret:%d,exit code:%d,exit sign:%d\n",ret,(status>>8)&0xFF,(status&0x7F));
 //     
 //       break;
 //   }else{
 //       printf("wait error\n");
 //       break;
 //   }
 //   sleep(1);

 // }


 


 






  ////阻塞式等待：如果子进程一直没有结束，那么父进程就一直等待，但是不挂电话，直到子进程结束
  //if(id == 0)
  //{
  //  int cnt = 5;
  //  while(cnt){
  //  printf("child process running,pid %d,ppid %d,cnt:%d\n",getpid(),getppid(),cnt--);
  //  sleep(1);
  //  }
  //  exit(0);
  //}
  //sleep(15);
  //int status = 0;
  //pid_t ret = waitpid(id,&status,0);
  //if(ret > 0){
  //  //表示等待成功，并且子进程退出了
  //  printf("wait success id:%d,status:%d \n",ret,status);
  //}
  //sleep(10);
  
  








  return 0;
}
